Micron Document
🎖️GitЯра🎖️

Node / meshcore / MeshCore / files / src / helpers / ui / ST7789Display.cpp

Displaying Raw • Download

src/helpers/ui/ST7789Display.cpp 93b2db63de9009af047a2d0e1bcd97b4b0ba7106 (93b2db63) Text, 5.20 KB

Tff7b72#Tff7b72ifdef ST7789

Tff7b72#Tff7b72include T8b949e"ST7789Display.h"

Tff7b72#Tff7b72ifndef X_OFFSET
Tff7b72#Tff7b72define X_OFFSET 0 T8b949e// No offset needed for landscape
Tff7b72#Tff7b72endif

Tff7b72#Tff7b72ifndef Y_OFFSET
Tff7b72#Tff7b72define Y_OFFSET 1 T8b949e// Vertical offset to prevent top row cutoff
Tff7b72#Tff7b72endif

Tff7b72#Tff7b72ifdef HELTEC_VISION_MASTER_T190
Tff7b72#Tff7b72define SCALE_X 2.5f T8b949e// 320 / 128
Tff7b72#Tff7b72define SCALE_Y 2.65625f T8b949e// 170 / 64
Tff7b72#Tff7b72else
Tff7b72#Tff7b72define SCALE_X 1.875f T8b949e// 240 / 128
Tff7b72#Tff7b72define SCALE_Y 2.109375f T8b949e// 135 / 64
Tff7b72#Tff7b72endif

Tff7b72#Tff7b72ifdef DISPLAY_SCALE_X
Tff7b72#Tff7b72define SCALE_X DISPLAY_SCALE_X
Tff7b72#Tff7b72endif

Tff7b72#Tff7b72ifdef DISPLAY_SCALE_Y
Tff7b72#Tff7b72define SCALE_Y DISPLAY_SCALE_Y
Tff7b72#Tff7b72endif

T8b949e// Color scheme
Te6edf3ColorVal Te6edf3UIColorTff7b72:Tff7b72:Te6edf3window_bkg Tff7b72= Te6edf3OLEDDISPLAY_COLORTff7b72:Tff7b72:Te6edf3BLACKTb4b4b4;
Te6edf3ColorVal Te6edf3UIColorTff7b72:Tff7b72:Te6edf3title_bkg Tff7b72= Te6edf3OLEDDISPLAY_COLORTff7b72:Tff7b72:Te6edf3BLACKTb4b4b4;
Te6edf3ColorVal Te6edf3UIColorTff7b72:Tff7b72:Te6edf3title_txt Tff7b72= Te6edf3OLEDDISPLAY_COLORTff7b72:Tff7b72:Te6edf3WHITETb4b4b4;
Te6edf3ColorVal Te6edf3UIColorTff7b72:Tff7b72:Te6edf3primary_txt Tff7b72= Te6edf3OLEDDISPLAY_COLORTff7b72:Tff7b72:Te6edf3WHITETb4b4b4;
Te6edf3ColorVal Te6edf3UIColorTff7b72:Tff7b72:Te6edf3secondary_txt Tff7b72= Te6edf3OLEDDISPLAY_COLORTff7b72:Tff7b72:Te6edf3WHITETb4b4b4;
Te6edf3ColorVal Te6edf3UIColorTff7b72:Tff7b72:Te6edf3warning_txt Tff7b72= Te6edf3OLEDDISPLAY_COLORTff7b72:Tff7b72:Te6edf3WHITETb4b4b4;
Te6edf3ColorVal Te6edf3UIColorTff7b72:Tff7b72:Te6edf3popup_bkg Tff7b72= Te6edf3OLEDDISPLAY_COLORTff7b72:Tff7b72:Te6edf3BLACKTb4b4b4;
Te6edf3ColorVal Te6edf3UIColorTff7b72:Tff7b72:Te6edf3popup_txt Tff7b72= Te6edf3OLEDDISPLAY_COLORTff7b72:Tff7b72:Te6edf3WHITETb4b4b4;
Te6edf3ColorVal Te6edf3UIColorTff7b72:Tff7b72:Te6edf3corp_blue Tff7b72= Te6edf3OLEDDISPLAY_COLORTff7b72:Tff7b72:Te6edf3WHITETb4b4b4;

Tffa657bool Td2a8ffST7789Display::beginTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72ifTb4b4b4(Tff7b72!Te6edf3_isOnTb4b4b4) Tb4b4b4{
Te6edf3pinModeTb4b4b4(Te6edf3PIN_TFT_VDD_CTLTb4b4b4, Te6edf3OUTPUTTb4b4b4)Tb4b4b4;
Te6edf3pinModeTb4b4b4(Te6edf3PIN_TFT_LEDA_CTLTb4b4b4, Te6edf3OUTPUTTb4b4b4)Tb4b4b4;
Te6edf3digitalWriteTb4b4b4(Te6edf3PIN_TFT_VDD_CTLTb4b4b4, Te6edf3LOWTb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72ifdef PIN_TFT_LEDA_CTL_ACTIVE
Te6edf3digitalWriteTb4b4b4(Te6edf3PIN_TFT_LEDA_CTLTb4b4b4, Te6edf3PIN_TFT_LEDA_CTL_ACTIVETb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72else
Te6edf3digitalWriteTb4b4b4(Te6edf3PIN_TFT_LEDA_CTLTb4b4b4, Te6edf3LOWTb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72endif
Te6edf3digitalWriteTb4b4b4(Te6edf3PIN_TFT_RSTTb4b4b4, Te6edf3HIGHTb4b4b4)Tb4b4b4;

Te6edf3displayTb4b4b4.Te6edf3initTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3displayTb4b4b4.Te6edf3landscapeScreenTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72ifdef DISPLAY_FLIP_VERTICALLY
Te6edf3displayTb4b4b4.Te6edf3flipScreenVerticallyTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72endif
Te6edf3displayTb4b4b4.Te6edf3displayOnTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3setCursorTb4b4b4(T79c0ff0Tb4b4b4,T79c0ff0Tb4b4b4)Tb4b4b4;

Te6edf3_isOn Tff7b72= Tffa657trueTb4b4b4;
Tb4b4b4}
Tff7b72return Tffa657trueTb4b4b4;
Tb4b4b4}

Tffa657void Td2a8ffST7789Display::turnOnTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3_isOnTb4b4b4) Tb4b4b4{
T8b949e// Restore power to the display but keep backlight off
Te6edf3digitalWriteTb4b4b4(Te6edf3PIN_TFT_VDD_CTLTb4b4b4, Te6edf3LOWTb4b4b4)Tb4b4b4;
Te6edf3digitalWriteTb4b4b4(Te6edf3PIN_TFT_RSTTb4b4b4, Te6edf3HIGHTb4b4b4)Tb4b4b4;
T8b949e// Re-initialize the display
Te6edf3displayTb4b4b4.Te6edf3initTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3displayTb4b4b4.Te6edf3displayOnTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72ifdef DISPLAY_FLIP_VERTICALLY
Te6edf3displayTb4b4b4.Te6edf3flipScreenVerticallyTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72endif
Te6edf3delayTb4b4b4(T79c0ff20Tb4b4b4)Tb4b4b4;

T8b949e// Now turn on the backlight
Tff7b72#Tff7b72ifdef PIN_TFT_LEDA_CTL_ACTIVE
Te6edf3digitalWriteTb4b4b4(Te6edf3PIN_TFT_LEDA_CTLTb4b4b4, Te6edf3PIN_TFT_LEDA_CTL_ACTIVETb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72else
Te6edf3digitalWriteTb4b4b4(Te6edf3PIN_TFT_LEDA_CTLTb4b4b4, Te6edf3LOWTb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72endif
Te6edf3_isOn Tff7b72= Tffa657trueTb4b4b4;
Tb4b4b4}
Tb4b4b4}

Tffa657void Td2a8ffST7789Display::turnOffTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3digitalWriteTb4b4b4(Te6edf3PIN_TFT_VDD_CTLTb4b4b4, Te6edf3HIGHTb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72ifdef PIN_TFT_LEDA_CTL_ACTIVE
Te6edf3digitalWriteTb4b4b4(Te6edf3PIN_TFT_LEDA_CTLTb4b4b4, Tff7b72!Te6edf3PIN_TFT_LEDA_CTL_ACTIVETb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72else
Te6edf3digitalWriteTb4b4b4(Te6edf3PIN_TFT_LEDA_CTLTb4b4b4, Te6edf3HIGHTb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72endif
Te6edf3digitalWriteTb4b4b4(Te6edf3PIN_TFT_RSTTb4b4b4, Te6edf3LOWTb4b4b4)Tb4b4b4;
Te6edf3_isOn Tff7b72= Tffa657falseTb4b4b4;
Tb4b4b4}

Tffa657void Td2a8ffST7789Display::clearTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3displayTb4b4b4.Te6edf3clearTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Tffa657void Td2a8ffST7789Display::startFrameTb4b4b4(Te6edf3ColorVal Te6edf3bkgTb4b4b4) Tb4b4b4{
Te6edf3displayTb4b4b4.Te6edf3clearTb4b4b4(Tb4b4b4)Tb4b4b4; T8b949e// TODO: use bkg
Te6edf3setColorTb4b4b4(Te6edf3UIColorTff7b72:Tff7b72:Te6edf3primary_txtTb4b4b4)Tb4b4b4;
Te6edf3displayTb4b4b4.Te6edf3setFontTb4b4b4(Te6edf3ArialMT_Plain_16Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Tffa657void Td2a8ffST7789Display::setTextSizeTb4b4b4(Tffa657int Te6edf3szTb4b4b4) Tb4b4b4{
Tff7b72switchTb4b4b4(Te6edf3szTb4b4b4) Tb4b4b4{
Tff7b72case T79c0ff1 Tb4b4b4:
Te6edf3displayTb4b4b4.Te6edf3setFontTb4b4b4(Te6edf3ArialMT_Plain_16Tb4b4b4)Tb4b4b4;
Tff7b72breakTb4b4b4;
Tff7b72case T79c0ff2 Tb4b4b4:
Te6edf3displayTb4b4b4.Te6edf3setFontTb4b4b4(Te6edf3ArialMT_Plain_24Tb4b4b4)Tb4b4b4;
Tff7b72breakTb4b4b4;
Tff7b72defaultTff7b72:
Te6edf3displayTb4b4b4.Te6edf3setFontTb4b4b4(Te6edf3ArialMT_Plain_16Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}

Tffa657void Td2a8ffST7789Display::setColorTb4b4b4(Te6edf3ColorVal Te6edf3cTb4b4b4) Tb4b4b4{
Te6edf3_color Tff7b72= Te6edf3cTb4b4b4;
Te6edf3displayTb4b4b4.Te6edf3setColorTb4b4b4(Tb4b4b4(Te6edf3OLEDDISPLAY_COLORTb4b4b4)Te6edf3_colorTb4b4b4)Tb4b4b4;
Te6edf3displayTb4b4b4.Te6edf3setRGBTb4b4b4(Te6edf3_color Tff7b72=Tff7b72= Te6edf3OLEDDISPLAY_COLORTff7b72:Tff7b72:Te6edf3WHITE Tff7b72? Te6edf3ST77XX_WHITE Tff7b72: Te6edf3ST77XX_BLACKTb4b4b4)Tb4b4b4;
Tb4b4b4}

Tffa657void Td2a8ffST7789Display::setCursorTb4b4b4(Tffa657int Te6edf3xTb4b4b4, Tffa657int Te6edf3yTb4b4b4) Tb4b4b4{
Te6edf3_x Tff7b72= Te6edf3xTff7b72*Te6edf3SCALE_X Tff7b72+ Te6edf3X_OFFSETTb4b4b4;
Te6edf3_y Tff7b72= Te6edf3yTff7b72*Te6edf3SCALE_Y Tff7b72+ Te6edf3Y_OFFSETTb4b4b4;
Tb4b4b4}

Tffa657void Td2a8ffST7789Display::printTb4b4b4(Tff7b72const Tffa657charTff7b72* Te6edf3strTb4b4b4) Tb4b4b4{
Te6edf3displayTb4b4b4.Te6edf3drawStringTb4b4b4(Te6edf3_xTb4b4b4, Te6edf3_yTb4b4b4, Te6edf3strTb4b4b4)Tb4b4b4;
Tb4b4b4}

Tffa657void Td2a8ffST7789Display::printWordWrapTb4b4b4(Tff7b72const Tffa657charTff7b72* Te6edf3strTb4b4b4, Tffa657int Te6edf3max_widthTb4b4b4) Tb4b4b4{
Te6edf3displayTb4b4b4.Te6edf3drawStringMaxWidthTb4b4b4(Te6edf3_xTb4b4b4, Te6edf3_yTb4b4b4, Te6edf3max_widthTff7b72*Te6edf3SCALE_XTb4b4b4, Te6edf3strTb4b4b4)Tb4b4b4;
Tb4b4b4}

Tffa657void Td2a8ffST7789Display::fillRectTb4b4b4(Tffa657int Te6edf3xTb4b4b4, Tffa657int Te6edf3yTb4b4b4, Tffa657int Te6edf3wTb4b4b4, Tffa657int Te6edf3hTb4b4b4) Tb4b4b4{
Te6edf3displayTb4b4b4.Te6edf3fillRectTb4b4b4(Te6edf3xTff7b72*Te6edf3SCALE_X Tff7b72+ Te6edf3X_OFFSETTb4b4b4, Te6edf3yTff7b72*Te6edf3SCALE_Y Tff7b72+ Te6edf3Y_OFFSETTb4b4b4, Te6edf3wTff7b72*Te6edf3SCALE_XTb4b4b4, Te6edf3hTff7b72*Te6edf3SCALE_YTb4b4b4)Tb4b4b4;
Tb4b4b4}

Tffa657void Td2a8ffST7789Display::drawRectTb4b4b4(Tffa657int Te6edf3xTb4b4b4, Tffa657int Te6edf3yTb4b4b4, Tffa657int Te6edf3wTb4b4b4, Tffa657int Te6edf3hTb4b4b4) Tb4b4b4{
Te6edf3displayTb4b4b4.Te6edf3drawRectTb4b4b4(Te6edf3xTff7b72*Te6edf3SCALE_X Tff7b72+ Te6edf3X_OFFSETTb4b4b4, Te6edf3yTff7b72*Te6edf3SCALE_Y Tff7b72+ Te6edf3Y_OFFSETTb4b4b4, Te6edf3wTff7b72*Te6edf3SCALE_XTb4b4b4, Te6edf3hTff7b72*Te6edf3SCALE_YTb4b4b4)Tb4b4b4;
Tb4b4b4}

Tffa657void Td2a8ffST7789Display::drawXbmTb4b4b4(Tffa657int Te6edf3xTb4b4b4, Tffa657int Te6edf3yTb4b4b4, Tff7b72const Tffa657uint8_tTff7b72* Te6edf3bitsTb4b4b4, Tffa657int Te6edf3wTb4b4b4, Tffa657int Te6edf3hTb4b4b4) Tb4b4b4{
T8b949e// Calculate the base position in display coordinates
Tffa657uint16_t Te6edf3startX Tff7b72= Te6edf3x Tff7b72* Te6edf3SCALE_X Tff7b72+ Te6edf3X_OFFSETTb4b4b4;
Tffa657uint16_t Te6edf3startY Tff7b72= Te6edf3y Tff7b72* Te6edf3SCALE_Y Tff7b72+ Te6edf3Y_OFFSETTb4b4b4;
T8b949e// Width in bytes for bitmap processing
Tffa657uint16_t Te6edf3widthInBytes Tff7b72= Tb4b4b4(Te6edf3w Tff7b72+ T79c0ff7Tb4b4b4) Tff7b72/ T79c0ff8Tb4b4b4;
T8b949e// Process the bitmap row by row
Tff7b72for Tb4b4b4(Tffa657uint16_t Te6edf3by Tff7b72= T79c0ff0Tb4b4b4; Te6edf3by Tff7b72< Te6edf3hTb4b4b4; Te6edf3byTff7b72+Tff7b72+Tb4b4b4) Tb4b4b4{
T8b949e// Calculate the target y-coordinates for this logical row
Tffa657int Te6edf3y1 Tff7b72= Te6edf3startY Tff7b72+ Tb4b4b4(Tffa657intTb4b4b4)Tb4b4b4(Te6edf3by Tff7b72* Te6edf3SCALE_YTb4b4b4)Tb4b4b4;
Tffa657int Te6edf3y2 Tff7b72= Te6edf3startY Tff7b72+ Tb4b4b4(Tffa657intTb4b4b4)Tb4b4b4(Tb4b4b4(Te6edf3by Tff7b72+ T79c0ff1Tb4b4b4) Tff7b72* Te6edf3SCALE_YTb4b4b4)Tb4b4b4;
Tffa657int Te6edf3block_h Tff7b72= Te6edf3y2 Tff7b72- Te6edf3y1Tb4b4b4;
T8b949e// Scan across the row bit by bit
Tff7b72for Tb4b4b4(Tffa657uint16_t Te6edf3bx Tff7b72= T79c0ff0Tb4b4b4; Te6edf3bx Tff7b72< Te6edf3wTb4b4b4; Te6edf3bxTff7b72+Tff7b72+Tb4b4b4) Tb4b4b4{
T8b949e// Calculate the target x-coordinates for this logical column
Tffa657int Te6edf3x1 Tff7b72= Te6edf3startX Tff7b72+ Tb4b4b4(Tffa657intTb4b4b4)Tb4b4b4(Te6edf3bx Tff7b72* Te6edf3SCALE_XTb4b4b4)Tb4b4b4;
Tffa657int Te6edf3x2 Tff7b72= Te6edf3startX Tff7b72+ Tb4b4b4(Tffa657intTb4b4b4)Tb4b4b4(Tb4b4b4(Te6edf3bx Tff7b72+ T79c0ff1Tb4b4b4) Tff7b72* Te6edf3SCALE_XTb4b4b4)Tb4b4b4;
Tffa657int Te6edf3block_w Tff7b72= Te6edf3x2 Tff7b72- Te6edf3x1Tb4b4b4;
T8b949e// Get the current bit
Tffa657uint16_t Te6edf3byteOffset Tff7b72= Tb4b4b4(Te6edf3by Tff7b72* Te6edf3widthInBytesTb4b4b4) Tff7b72+ Tb4b4b4(Te6edf3bx Tff7b72/ T79c0ff8Tb4b4b4)Tb4b4b4;
Tffa657uint8_t Te6edf3bitMask Tff7b72= T79c0ff0x80 Tff7b72>Tff7b72> Tb4b4b4(Te6edf3bx Tff7b72& T79c0ff7Tb4b4b4)Tb4b4b4;
Tffa657bool Te6edf3bitSet Tff7b72= Te6edf3pgm_read_byteTb4b4b4(Te6edf3bits Tff7b72+ Te6edf3byteOffsetTb4b4b4) Tff7b72& Te6edf3bitMaskTb4b4b4;
T8b949e// If the bit is set, draw a block of pixels
Tff7b72if Tb4b4b4(Te6edf3bitSetTb4b4b4) Tb4b4b4{
T8b949e// Draw the block as a filled rectangle
Te6edf3displayTb4b4b4.Te6edf3fillRectTb4b4b4(Te6edf3x1Tb4b4b4, Te6edf3y1Tb4b4b4, Te6edf3block_wTb4b4b4, Te6edf3block_hTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Tffa657uint16_t Td2a8ffST7789Display::getTextWidthTb4b4b4(Tff7b72const Tffa657charTff7b72* Te6edf3strTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3displayTb4b4b4.Te6edf3getStringWidthTb4b4b4(Te6edf3strTb4b4b4) Tff7b72/ Te6edf3SCALE_XTb4b4b4;
Tb4b4b4}

Tffa657void Td2a8ffST7789Display::endFrameTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3displayTb4b4b4.Te6edf3displayTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72#Tff7b72endif

Served by rngit 1.5.2 - Generated in 1.04s